home *** CD-ROM | disk | FTP | other *** search
Text File | 1998-04-16 | 2.1 KB | 92 lines | [TEXT/CWIE] |
- // RamStoreStream.cp
- // Copyright: © 1994 - 1998 by Apple Computer, Inc., all rights reserved.
-
-
- // Implements IAStoreStream using ram
- //
- // **** use with "BetterHandleStream.cp" for controllable buffer growth rate
-
- // Note that this doesn't ever delete the stream you give it, so you can re-use
- // the ram in subsequent instantiations of this class.
-
- #include "RamStoreStream.h"
- #include <string.h>
- #include <LHandleStream.h>// powerplant stream class
-
- RamStoreStream::RamStoreStream( LHandleStream* _myStream) {
- myStream = _myStream;
- am_open = false;
- }
-
- RamStoreStream::~RamStoreStream() {
- }
-
- void RamStoreStream::Initialize() {
- }
-
- void RamStoreStream::Open(bool writeable) {
- am_open = true;
- }
-
- bool RamStoreStream::IsOpen() {
- return am_open;
- }
-
- void RamStoreStream::Flush() {
- MaybeFlushBuffer();
- }
-
- uint32 RamStoreStream::GetEOF() {
- return myStream->GetLength();
- }
-
- void RamStoreStream::SetEOF(uint32 address) {
- IAAssert(false);
- }
-
-
- void RamStoreStream::Write(uint32 address, const byte* data, uint32 length)
- {
- uint32 old_stream_length = myStream->GetLength();
-
- if (address > old_stream_length)
- {
- myStream->SetMarker(0,streamFrom_End);
- // here's a cheesy, inefficient way to zero the stream out w/out accessing it's internals
-
- Ptr zeros = NewPtrClear(address - old_stream_length);
- IAThrowIfNot(zeros, StoreFull);
- myStream->WriteData(&zeros,address - old_stream_length);
- DisposePtr(zeros);
-
- IAThrowIfNot( myStream->GetLength() >= address, StoreFull);
- }
- myStream->SetMarker(address,streamFrom_Start);
- IAThrowIfNot(myStream->GetMarker() == address, StoreError);
- Int32 bytes_written = myStream->WriteData(data, length);
- IAThrowIfNot( bytes_written == length, StoreFull);
- }
-
- uint32 RamStoreStream::Read(uint32 address, byte* data, uint32 length)
- {
- myStream->SetMarker(address,streamFrom_Start);
- return myStream->ReadData(data, length);
- }
-
- bool RamStoreStream::IsWritable( void )
- {
- return true;
- }
-
- IAStoreStream *RamStoreStream::Clone(void)
- {
- throw new IAException("RamStoreStream::Clone not implemented");
- return NULL;
- }
-
-
- //void RamStoreStream::SetFileType(char* name) {}
-
-
-
-